
package edu.java.homework.hw07.test0606a;

/*
Neka sa dadeni klasovete A, B, C, kato B naslediava A, C naslediava B.
Vseki ot klasovete realizira metoda
void doIt();
Posochete, koi ot operatorite v redovete otbeliazani s (a) do (f) 
e obryshtenie kym metoda doIt() na klasa C, 
ili e verno tvyrdeneto v red (g).
*/

class A{
	void doIt() {
	    System.out.println("from A"); 
	}
}

class B extends A{
	void doIt() {
	    System.out.println("from B");
	    
	}
}

class C extends B{
//    static int counter=0;
	void doIt() {
		System.out.println("from C");

//		counter++;
//		if(counter==3){
//		    return;
//		}
		
//		doIt();                // (a)
//		super.doIt();          // (b)
//		super.super.doIt();    // (c)
//		this.super.doIt();     // (d)
//		A.this.doIt();         // (e)
		((A)this).doIt();      // (f)
//		nito edno ot posochenite// (g)
	}
}

public class Test0606a{
	public static void main(String args[]){
		C c= new C();
		c.doIt();
	}
}

/*
(a)	doIt();				rekursivno obryshtenie
(f)	((A)this).doIt();		identichno s (a)
*/

//Posochete, koi ot operatorite v redovete otbeliazani s (a) do (f) 
//e obryshtenie kym metoda doIt() na klasa C

//(a)   ок + OverFlowException , това е обръщение, но така записано ще хвърли OverFlowException заради рекурсията
//(b)   грешка , ще извика doIt() метода на класа В
//(c)   грешка , недопустима употреба на super
//(d)	грешка , недопустима употреба на super и this. Употребата на this тук е ненужна и може да се пропусне
//(e)   грешка , не може така да се използва класа А, също и this
//(f)   ок + OverFlowException 

